In conventional networked storage systems, large volumes of data are repeatedly recorded and retrieved. Due to the magnitude of data, large numbers of storage elements are employed to archive the information and make it readily available when requested. The sheer number of storage elements necessitates using precise and complex controllers to manage not only where specific data is stored but also the storage and retrieval process. The controllers act as a management layer to oversee storage operations and to offload the processing-intensive storage functions from the system hosts. This offloading of storage tasks allows the hosts to use more processing cycles for other primary functions. In this manner, hosts write data to and access data contained on storage elements through storage controllers.
In conventional storage controller architectures, storage element access commands (typically, data reads and writes to a hard disk drive or like device) are sent to a command pending queue. These queued commands are sent to their respective storage elements in the order received. The storage controller may generate storage element access commands to service different tasks, including a misread cache, no cache write (e.g., FUA), copy, flush cache, etc. Some commands, for example, a cache misread command, require the host to wait for the results, while others, for example, a flush cache command, may be administered as a background task. The tasks may have several different levels of priority, and those priority levels, both relative and absolute, may change over time.
In the most basic implementation of a command pending queue, the first commands into the queue are the first to be processed, and so on. The pending queue is a single list of various types of commands and may include time-critical tasks, i.e., in which the host is waiting for a response, or non-time-critical tasks. However, there is no prioritization to optimize storage element access command processing in such a way that latency due to critical storage element-dependent tasks is minimized.
Simple prioritization schemes, such as placing all high-priority tasks like cache misreads at the head of a given storage element queue, are possible; however, this solution has an inherent problem. In a storage controller use modality in which there is a significant percentage of high-priority tasks, the lower priority tasks may not get adequate servicing. For example, although flush cache tasks may be non-critical to host data latency, they must be performed relatively frequently to ensure non-volatile storage of data and efficient cache management. What is needed is a way to manage pending commands that allows command prioritization and provides minimal service levels for all commands.
An example method for prioritizing storage element commands is described in U.S. Pat. No. 6,609,149, entitled, “Method and Apparatus for Prioritizing Video Frame Retrieval in a Shared Disk Cluster”. The '149 patent describes how a first frame deadline is calculated and attached to an I/O request for prioritizing and retrieving video data frames from a shared disk cluster. Disk adapters queue video data frame requests according to the deadline incorporated in the frame requests. Data frames are transmitted to a requesting end user utilizing the attached deadline time to schedule the frames according to a time priority. A “slack” time is computed and utilized to determine when the first frame and subsequent frames of the requested video data may be retrieved from disk and present in the video server's memory in order to avoid a visible delay in sending that frame to the end user. Slack time is saved to each disk read request command packet and is equal to deadline time less the current time at which the command packet is sent to the disk adapter. The process next issues the disk read request to the disk adapter. The process continues to queue read commands in the disk adapter. While in the disk adapter queue, slack time of each read command is regularly decremented so that the waiting time of the read command in queue is reflected. The disk controller requests another command and the disk adapter sends a read command having the least slack time remaining.
Although the method described in the '149 patent provides a method of guaranteeing a minimum I/O bandwidth for each disk drive, it is specific to disk read commands (for a video on demand system) and does not provide an operational method for prioritizing other storage element commands such as write, rebuild, or copy, for example. The disk adapter described in the '149 patent prioritizes read commands based on latency requirements and sends read commands to the storage element in that order. The method described in the '149 patent does not teach one skilled in the art how to prioritize other types of system commands, conventionally used in a networked storage element array, without compromising storage element bandwidth for any commands. There is therefore, a need to provide higher and lower prioritization levels for various storage element commands and ensure that all priority level commands are processed with minimal latency.